/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package FACTURAS;

import CONTROLES.Conexion;
import CONTROLES.ControlSucursal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author VICENTE
 */
public class ControlFactura {

    public Factura registrarFactura(Factura factura){
        Conexion conection = new Conexion();
        Factura res = new Factura();
        int c = 0;
        try{
          Dosificacion d = factura.getDosificacion();
          Connection conectado = conection.getConexion();
          String nombreS = new ControlSucursal().dameNomSucursal(factura.getIdSucursal());
          String sql = "select nextval('sucursal_"+nombreS.replaceAll(" ", "_")+"')";
          PreparedStatement ps1 = conectado.prepareStatement(sql);
          ResultSet respA = ps1.executeQuery();
          
            while (respA.next()){
                c = respA.getInt(1);
            }
          ps1.close();
          SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");
          String fechaE = df.format(factura.getFecha());
          fechaE = fechaE.replace("/", "");
          System.out.println(fechaE);
          factura.setNumFactura(c);
          String codigo = new CodigoControl(d.getLlave(), d.getNumAutorizacion(), String.valueOf(factura.getNumFactura()), factura.getNitCliente(), fechaE, String.valueOf(factura.getMonto()) ).generarCodigoControl();
          factura.setCodigoControl(codigo);
          PreparedStatement psc = conectado.prepareStatement("INSERT INTO factura(numero_factura, fecha_emision, razon_social, nit_ci, total_general, codigo_control, id_dosificacion, id_sucursal, concepto, estado, contabilizada) VALUES ('"+factura.getNumFactura()+"','"+ factura.getFecha()+"','"+factura.getCliente()+"','"+factura.getNitCliente()+"','"+factura.getMonto()+"','"+factura.getCodigoControl()+"','"+d.getIdDosificacion()+"','"+factura.getIdSucursal()+"','"+factura.getDetalle()+"','"+factura.getEstado()+"', '"+factura.isContabilizada()+"');");
          psc.executeUpdate();
          psc.close();
          res = new ControlFactura().getFactura(c);


        }catch (SQLException em) {
            System.out.println("error al Registrar la Factura en la base de datos"+em.getLocalizedMessage() );
            return null;
        }
            return res;
    }

    public ArrayList<Factura> getFacturasMes(int idSucursal, Date fechaInicio, Date fechaFin) {

        Conexion conection = new Conexion();
        ArrayList<Factura> facturas = new ArrayList<Factura>();
        Factura f;
        try{
            Connection conectado = conection.getConexion();
            PreparedStatement psc = conectado.prepareStatement("select * from factura where id_sucursal = '"+idSucursal+"' AND fecha_emision >= '"+fechaInicio+"' AND fecha_emision < '"+fechaFin+"'  ORDER BY fecha_emision ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){
                f= new Factura();
                f.setNumFactura(respEmp.getInt(1));
                f.setFecha(respEmp.getDate(2));
                f.setCliente(respEmp.getString(3));
                f.setNitCliente(respEmp.getString(4));
                f.setMonto(respEmp.getDouble(5));
                f.setCodigoControl(respEmp.getString(6));
                f.setIdDosificacion(respEmp.getInt(7));
                f.setIdSucursal(respEmp.getInt(8));
                f.setDetalle(respEmp.getString(9));
                f.setEstado(respEmp.getString(10));
                f.setContabilizada(respEmp.getBoolean(11));
                facturas.add(f);
            }
        }catch (SQLException e){
            System.out.println("error al recuperar lista de Facruras " + e.getLocalizedMessage());
        }
        return facturas;
    }

    public Factura getFactura(int id) {

        Conexion conection = new Conexion();
        Factura f= new Factura();
        try{
            Connection conectado = conection.getConexion();
            PreparedStatement psc = conectado.prepareStatement("select * from factura where numero_factura = '"+id+"'ORDER BY fecha_emision ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){
                f.setNumFactura(respEmp.getInt(1));
                f.setFecha(respEmp.getDate(2));
                f.setCliente(respEmp.getString(3));
                f.setNitCliente(respEmp.getString(4));
                f.setMonto(respEmp.getDouble(5));
                f.setCodigoControl(respEmp.getString(6));
                f.setIdDosificacion(respEmp.getInt(7));
                f.setIdSucursal(respEmp.getInt(8));
                f.setDetalle(respEmp.getString(9));
                f.setEstado(respEmp.getString(10));
                f.setContabilizada(respEmp.getBoolean(11));
            }
        }catch (SQLException e){
            System.out.println("error al recuperar lista de Facruras " + e.getLocalizedMessage());
        }
        return f;
    }

    public boolean AnularFactura(int num) {
        Conexion conection = new Conexion();
       try
       {
          Connection conectado = conection.getConexion();
          PreparedStatement ps = conectado.prepareStatement("UPDATE factura SET estado = 'A' WHERE numero_factura = '"+num+"';");
          ps.executeUpdate();
          ps.close();
          } catch (SQLException em) {
                System.out.println("error al Anular la FACTURA "+em.getLocalizedMessage() );
                return false;
          }
       return true;
    }
}
